package com.xyh.system.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.xyh.system.model.User;
import com.baomidou.mybatisplus.extension.service.IService;
import org.apache.ibatis.annotations.Param;

import java.util.Set;

/**
 * <p>
 * 用户表 服务类
 * </p>
 *
 * @author kyle
 * @since 2021-01-05
 */
public interface IUserService extends IService<User> {
    /**
     * 根据用户名获取用户对象信息
     *
     * @param username 登录用户名
     * @return 用户对象信息
     */
    User selectUserByUsername(String username);

    /**
     * 根据页面查询条件，分页显示用户信息，查询条件为空则查询所有
     *
     * @param page      当前页码
     * @param limit     每页显示数量
     * @param userQuery 页面传入的查询对象
     * @return 分页的用户数据
     */
    IPage<User> selectAllWithDept(Integer page, Integer limit, User userQuery);

    /**
     * 根据用户名获取拥有的所有角色名
     *
     * @param username 登录用户名
     * @return 该用户拥有的所有角色名
     */
    Set<String> selectRoleNameByUserName(@Param("username") String username);

    /**
     * 获取用户拥有的所有菜单权限和操作权限.
     *
     * @param username 用户名
     * @return 权限标识符号列表
     */
    Set<String> selectPermsByUsername(String username);

    /**
     * 获取用户所拥有的操作权限
     *
     * @param username 登录用户名
     * @return 该用户拥有操作权限的Set集合
     */
    Set<String> selectOperatorPermsByUserName(String username);

    /**
     * 查询此用户拥有的所有角色的 ID
     *
     * @param userId 用户 ID
     * @return 拥有的角色 ID 数组
     */
    Integer[] selectRoleIdsByUserId(@Param("userId") Integer userId);

    /**
     * 新增用户
     *
     * @param user    用户对象
     * @param roleIds 用户对应的角色id
     * @return 添加成功返回新增用户id
     */
    Integer add(User user, Integer[] roleIds);

    /**
     * 更新用户
     *
     * @param user    用户对象
     * @param roleIds 用户对象对应的角色
     * @return
     */
    boolean update(User user, Integer[] roleIds);

    /**
     * 通过用户id，变更状态--正常1
     *
     * @param userId
     * @return
     */
    boolean enableStatus(Integer userId);

    /**
     * 通过用户id，变更状态--锁定0
     *
     * @param userId
     * @return
     */
    boolean disableStatus(Integer userId);
}
